AWS Lambda で BeanShell を動かしてみた
毎度お馴染み流浪の動かしてみた & C 芸人の Fujimura です。
以前、紹介した lambdash の Java 版を BeanShell で実現してみました。
準備
$ git clone https://github.com/fd00/aws-lambda-bsh.git $ cd aws-lambda-bsh $ ./gradlew jar
生成された build/libs/aws-lambda-bsh-0.1.jar
をアップロードします。
実行
payload として result
に結果が格納されるようなコードを渡します。
$ aws lambda invoke --function-name AwsLambdaBsh --payload "\"result = java.lang.Math.PI;\"" /dev/stderr > /dev/null "3.141592653589793"
システムプロパティを取得してみます。
$ aws lambda invoke --function-name AwsLambdaBsh --payload "\"result = System.getProperties();\"" /tmp/properties.txt > /dev/null $ cat /tmp/properties.txt | sed -e 's/^"{//' -e 's/}"$//' | sed -e 's/, /%/g' | tr '%' '\n' awt.toolkit=sun.awt.X11.XToolkit file.encoding.pkg=sun.io file.encoding=ANSI_X3.4-1968 file.separator=/ java.awt.graphicsenv=sun.awt.X11GraphicsEnvironment java.awt.printerjob=sun.print.PSPrinterJob java.class.path=/var/runtime:/var/runtime/lib/LambdaSandboxJavaAPI-1.1.jar java.class.version=52.0 java.endorsed.dirs=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.51-1.b16.6.amzn1.x86_64/jre/lib/endorsed java.ext.dirs=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.51-1.b16.6.amzn1.x86_64/jre/lib/ext:/usr/java/packages/lib/ext java.home=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.51-1.b16.6.amzn1.x86_64/jre java.io.tmpdir=/tmp java.library.path=/var/runtime:/var/task:/var/task/lib:/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib java.runtime.name=OpenJDK Runtime Environment java.runtime.version=1.8.0_51-b16 java.specification.name=Java Platform API Specification java.specification.vendor=Oracle Corporation java.specification.version=1.8 java.vendor.url.bug=http://bugreport.sun.com/bugreport/ java.vendor.url=http://java.oracle.com/ java.vendor=Oracle Corporation java.version=1.8.0_51 java.vm.info=mixed mode java.vm.name=OpenJDK 64-Bit Server VM java.vm.specification.name=Java Virtual Machine Specification java.vm.specification.vendor=Oracle Corporation java.vm.specification.version=1.8 java.vm.vendor=Oracle Corporation java.vm.version=25.51-b03 line.separator=\n os.arch=amd64 os.name=Linux os.version=3.14.48-33.39.amzn1.x86_64 path.separator=: sun.arch.data.model=64 sun.boot.class.path=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.51-1.b16.6.amzn1.x86_64/jre/lib/resources.jar:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.51-1.b16.6.amzn1.x86_64/jre/lib/rt.jar:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.51-1.b16.6.amzn1.x86_64/jre/lib/sunrsasign.jar:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.51-1.b16.6.amzn1.x86_64/jre/lib/jsse.jar:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.51-1.b16.6.amzn1.x86_64/jre/lib/jce.jar:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.51-1.b16.6.amzn1.x86_64/jre/lib/charsets.jar:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.51-1.b16.6.amzn1.x86_64/jre/lib/jfr.jar:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.51-1.b16.6.amzn1.x86_64/jre/classes sun.boot.library.path=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.51-1.b16.6.amzn1.x86_64/jre/lib/amd64 sun.cpu.endian=little sun.cpu.isalist= sun.io.unicode.encoding=UnicodeLittle sun.java.command=lambdainternal.LambdaRTEntry sun.java.launcher=SUN_STANDARD sun.jnu.encoding=ANSI_X3.4-1968 sun.management.compiler=HotSpot 64-Bit Tiered Compilers sun.os.patch.level=unknown user.country=US user.dir=/ user.home=/home/sbx_user1051 user.language=en user.name=sbx_user1051 user.timezone=UTC
まとめ
Java 特有の実行環境情報を取得するという目的で BeanShell を組み込んだ AWS Lambda function を作成してみました。
当然ながらインタプリタとしても動くため、簡易コードの AWS Lambda での挙動確認にも利用できると思います。